package _00_LianXi;

import java.util.Scanner;
/**
 * 观察下面杨辉三角(前5行),并打印出前7行

1
1 1
1 2 1
1 3 3 1 
1 4 6 4 1

第 n行 第 k 列 = n-1行 的k-1列 + k列
 * @author lenovo
 * @Date 2020年7月1日
 * @Time 下午5:10:34
 */
public class Array_LianXi {

	public static void main(String[] args) {
		System.out.println("请输入杨辉三角形的行数:");
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		//接收键盘输入的杨辉三角的行数
		
		int[][] arr = new int [n][];
		//动态初始化二维数组,一共有n行,
		for (int i = 0; i < n; i++) {
			
			//用一个for循环初始化每一行的元素个数
			arr[i] = new int[i+1];
			
			for (int j = 0; j <= i; j++) {
				/**
				 * 把所有的二维数组初始化为1,类似于
				 * 1
				 * 1 1
				 * 1 1 1
				 * 1 1 1 1
				 * 不初始化一下无法确定每一行第一个元素和最后一个元素为1,使用公式计算元素中间值会报空指针异常
				 */
				arr[i][j] = 1;
			}
		}
		/**
		 * 从第三行第二个元素开始计算,外循环初值为2,内循环初值为1
		 * 按公式依次计算每一行的中间元素(除了第一个元素和最后一个元素,已经初始化为1)
		 * 循环结束后,二维数组中的元素就类似
		 * 1
		 * 1 1 
		 * 1 2 1
		 * 1 3 3 1
		 */
		for (int i = 2; i < n; i++) {
			for (int j = 1; j < i; j++) {
				//计算下一行的值,第 n行 第 k 列 = n-1行 的k-1列 + k列
				arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
			}
		}
		
		//打印杨辉三角形
		for (int i = 0; i < n; i++) {
			for (int j = 0; j <= i; j++) {
				System.out.print(arr[i][j]+" ");
			}
			
			//打印回车换行
			System.out.println();
		}
	}

}
